package com.gitee.cashzhang27.test.boot.functional.properties;

import java.net.URL;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.redisson.config.SslProvider;

/**
 * Redisson 基础模式属性.
 *
 * @author Cash Zhang
 * @version v1.0 2020/09/17 15:03
 * @since v1.0
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RedissonBasePatternProperties {

  /**
   * 启动标识.
   */
  private boolean enabled = false;


  /**
   * 连接空闲超时，单位：毫秒.
   * 默认值：10秒
   * 如果当前连接池里的连接数量超过了最小空闲连接数，而同时有连接空闲时间超过了该数值，
   * 那么这些连接将会自动被关闭，并从连接池里去掉。时间单位是毫秒。
   */
  private int idleConnectionTimeout = 10000;

  /**
   * 命令等待超时，单位：毫秒.
   * 默认值：3秒
   */
  private int timeout = 3000;

  /**
   * 命令失败重试次数.
   * 默认值：3
   * 如果尝试达到 retryAttempts（命令失败重试次数） 仍然不能将命令发送至某个指定的节点时，
   * 将抛出错误。如果尝试在此限制之内发送成功，则开始启用 timeout（命令等待超时） 计时。
   */
  private int retryAttempts = 3;

  /**
   * 命令重试发送时间间隔，单位：毫秒.
   * 默认值：1.5秒
   * 在一条命令发送失败以后，等待重试发送的时间间隔。时间单位是毫秒。
   */
  private int retryInterval = 1500;

  /**
   * 每个连接的最大订阅数量.
   * 默认值：5
   */
  private int subscriptionsPerConnection = 5;

  /**
   * 客户端名称.
   * 在Redis节点里显示的客户端名称.
   */
  private String clientName;

  /**
   * 启用SSL终端识别.
   * 默认值：true
   * 开启SSL终端识别能力.
   */
  private boolean sslEnableEndpointIdentification = true;

  /**
   * SSL实现方式.
   * 默认值：JDK
   * 可选参数：
   * SslProvider.JDK
   * SslProvider.OPENSSL
   */
  private SslProvider sslProvider = SslProvider.JDK;

  /**
   * SSL信任证书库路径.
   */
  private URL sslTruststore;

  /**
   * SSL信任证书库密码.
   */
  private String sslTruststorePassword;

  /**
   * SSL钥匙库路径.
   */
  private URL sslKeystore;

  /**
   * SSL钥匙库密码.
   */
  private String sslKeystorePassword;

  /**
   * 定义每个与Redis的连接的PING命令发送间隔0表示禁用.单位：毫秒
   */
  private int pingConnectionInterval;

  /**
   * 开启 TCP 连接 keepAlive.
   */
  private boolean keepAlive;

  /**
   * 开启 TCP 连接 tcpNoDelay.
   */
  private boolean tcpNoDelay;

}
